CREATE EXTERNAL TABLE jms_dwd.dwd_s03_whole_operations_waybill_trace_mid_dt(
   `waybill_no` string COMMENT '运单号',
   `waybill_first_scantime` timestamp COMMENT '最早操作时间',
   `waybill_first_scantype` string COMMENT '最早扫描类型',
   `waybill_end_scantime` timestamp COMMENT '最晚操作时间',
   `waybill_end_scantype` string COMMENT '最晚扫描类型',
   `waybill_all_operation_times` int COMMENT '运单扫描总次数',
   `center_all_operation_times` int COMMENT '中心扫描总次数',
   `nodal_all_operation_times` int COMMENT '集散网点扫描次数',
   `network_all_count` int COMMENT '运单总经过网点数',
   `center_all_count` int COMMENT '运单总经过中心数',
   `nodal_all_count` int COMMENT '运单总经过集散网点数',
   `actual_taking_scantime` timestamp COMMENT '实际揽收时间 ',
   `actual_taking_scansitecode` string COMMENT '实际揽收网点',
   `actual_taking_weight` double COMMENT '实际揽收重量',
   `actual_taking_scantype` string COMMENT '实际揽收扫描类型 ',
   `taking_later_scantime` timestamp COMMENT '最晚揽收时间',
   `taking_early_scantime` timestamp COMMENT '最早揽收时间',
   `taking_early_scansitecode` string COMMENT '最早揽收网点',
   `taking_early_weight` double COMMENT '最早揽收重量',
   `warehousing_later_scantime` timestamp COMMENT '最晚入仓时间',
   `warehousing_early_scantime` timestamp COMMENT '最早入仓时间',
   `warehousing_early_scansitecode` string COMMENT '最早入仓网点',
   `warehousing_early_weight` double COMMENT '最早入仓重量',
   `bagging_early_scantime` timestamp COMMENT '最早装袋时间',
   `bagging_early_scansitecode` string COMMENT '最早装袋网点编码',
   `bagging_early_package_code` string COMMENT '最早装袋包号',
   `first_network_network_code` string COMMENT '顺序第一个网点网点编码',
   `first_network_loading_later_time` timestamp COMMENT '顺序第一个网点最晚装车时间',
   `first_network_loading_later_weight` double COMMENT '顺序第一个网点最晚装车扫描对应重量',
   `first_network_send_later_time` timestamp COMMENT '顺序第一个网点最晚发车时间',
   `first_network_send_later_weight` double COMMENT '顺序第一个网点最晚发车扫描对应重量',
   `first_network_loading_send_shipment_no` string COMMENT '顺序第一个网点最晚装车发件扫描对应任务号',
   `first_network_loading_send_planned_departure_time` timestamp COMMENT '顺序第一个网点最晚装车发件规划发车时间',
   `first_network_loading_send_planned_arrival_time` timestamp COMMENT '顺序第一个网点最晚装车发件规划到车时间',
   `first_network_loading_send_actual_departure_time` timestamp COMMENT '顺序第一个网点最晚装车发件实际发车时间',
   `first_network_loading_send_actual_arrival_time` timestamp COMMENT '顺序第一个网点最晚装车发件实际到车时间',
   `first_network_loading_send_next_network_code` string COMMENT '顺序第一个网点最晚装车发件实际下一站网点编码',
   `first_network_loading_send_next_network_type` tinyint COMMENT '顺序第一个网点最晚装车发件实际下一站网点类型',
   `first_nodal_network_code` string COMMENT '顺序第一个集散网点编码',
   `first_nodal_unloading_early_time` timestamp COMMENT '顺序第一个集散最早卸车时间',
   `first_nodal_unloading_early_weight` double COMMENT '顺序第一个集散最早卸车扫描对应重量',
   `first_nodal_arrival_early_time` timestamp COMMENT '顺序第一个集散最早到件时间',
   `first_nodal_arrival_early_weight` double COMMENT '顺序第一个集散最早到件扫描对应重量',
   `first_nodal_unloading_arrival_shipment_no` string COMMENT '顺序第一个集散最早卸车到件扫描对应任务号',
   `first_nodal_unloading_arrival_planned_departure_time` timestamp COMMENT '顺序第一个集散最早卸车到件规划发车时间',
   `first_nodal_unloading_arrival_planned_arrival_time` timestamp COMMENT '顺序第一个集散最早卸车到件规划到车时间',
   `first_nodal_unloading_arrival_actual_departure_time` timestamp COMMENT '顺序第一个集散最早卸车到件实际发车时间',
   `first_nodal_unloading_arrival_actual_arrival_time` timestamp COMMENT '顺序第一个集散最早卸车到件实际到车时间',
   `first_nodal_loading_later_time` timestamp COMMENT '顺序第一个集散最晚装车时间',
   `first_nodal_loading_later_weight` double COMMENT '顺序第一个集散最晚装车扫描对应重量',
   `first_nodal_send_later_time` timestamp COMMENT '顺序第一个集散最晚发车时间',
   `first_nodal_send_later_weight` double COMMENT '顺序第一个集散最晚发车扫描对应重量',
   `first_nodal_loading_send_shipment_no` string COMMENT '顺序第一个集散最晚装车发件扫描对应任务号',
   `first_nodal_loading_send_planned_departure_time` timestamp COMMENT '顺序第一个集散最晚装车发件规划发车时间',
   `first_nodal_loading_send_planned_arrival_time` timestamp COMMENT '顺序第一个集散最晚装车发件规划到车时间',
   `first_nodal_loading_send_actual_departure_time` timestamp COMMENT '顺序第一个集散最晚装车发件实际发车时间',
   `first_nodal_loading_send_actual_arrival_time` timestamp COMMENT '顺序第一个集散最晚装车发件实际到车时间',
   `first_nodal_loading_send_next_network_code` string COMMENT '顺序第一个集散最晚装车发件实际下一站网点编码',
   `first_nodal_loading_send_next_network_type` tinyint COMMENT '顺序第一个集散最晚装车发件实际下一站网点类型',
   `first_center_network_code` string COMMENT '顺序第一个转运中心网点编码',
   `first_center_unloading_early_time` timestamp COMMENT '顺序第一个中心最早卸车时间',
   `first_center_unloading_early_weight` double COMMENT '顺序第一个中心最早卸车扫描对应重量',
   `first_center_arrival_early_time` timestamp COMMENT '顺序第一个中心最早到件时间',
   `first_center_arrival_early_weight` double COMMENT '顺序第一个中心最早到件扫描对应重量',
   `first_center_unloading_arrival_shipment_no` string COMMENT '顺序第一个中心最早卸车到件扫描对应任务号',
   `first_center_unloading_arrival_planned_departure_time` timestamp COMMENT '顺序第一个中心最早卸车到件规划发车时间',
   `first_center_unloading_arrival_planned_arrival_time` timestamp COMMENT '顺序第一个中心最早卸车到件规划到车时间',
   `first_center_unloading_arrival_actual_departure_time` timestamp COMMENT '顺序第一个中心最早卸车到件实际发车时间',
   `first_center_unloading_arrival_actual_arrival_time` timestamp COMMENT '顺序第一个中心最早卸车到件实际到车时间',
   `first_center_loading_later_time` timestamp COMMENT '顺序第一个中心最晚装车时间',
   `first_center_loading_later_weight` double COMMENT '顺序第一个中心最晚装车扫描对应重量',
   `first_center_send_later_time` timestamp COMMENT '顺序第一个中心最晚发件时间',
   `first_center_send_later_weight` double COMMENT '顺序第一个中心最晚发件扫描对应重量',
   `first_center_loading_send_shipment_no` string COMMENT '顺序第一个中心最晚装车发件扫描对应任务号',
   `first_center_loading_send_planned_departure_time` timestamp COMMENT '顺序第一个中心最晚装车发件规划发车时间',
   `first_center_loading_send_planned_arrival_time` timestamp COMMENT '顺序第一个中心最晚装车发件规划到车时间',
   `first_center_loading_send_actual_departure_time` timestamp COMMENT '顺序第一个中心最晚装车发件实际发车时间',
   `first_center_loading_send_actual_arrival_time` timestamp COMMENT '顺序第一个中心最晚装车发件实际到车时间',
   `first_center_loading_send_next_network_code` string COMMENT '顺序第一个中心最晚装车发件实际下一站网点编码',
   `first_center_loading_send_next_network_type` tinyint COMMENT '顺序第一个中心最晚装车发件实际下一站网点类型',
   `second_center_network_code` string COMMENT '第二转运中心',
   `second_center_unloading_early_time` timestamp COMMENT '第二中心最早卸车时间',
   `second_center_unloading_early_weight` double COMMENT '第二中心最早卸车扫描对应重量',
   `second_center_arrival_early_time` timestamp COMMENT '第二中心最早到件时间',
   `second_center_arrival_early_weight` double COMMENT '第二中心最早到件扫描对应重量',
   `second_center_unloading_arrival_shipment_no` string COMMENT '第二中心最早卸车到件扫描对应任务号',
   `second_center_unloading_arrival_planned_departure_time` timestamp COMMENT '第二中心最早卸车到件规划发车时间',
   `second_center_unloading_arrival_planned_arrival_time` timestamp COMMENT '第二中心最早卸车到件规划到车时间',
   `second_center_unloading_arrival_actual_departure_time` timestamp COMMENT '第二中心最早卸车到件实际发车时间',
   `second_center_unloading_arrival_actual_arrival_time` timestamp COMMENT '第二中心最早卸车到件实际到车时间',
   `second_center_loading_later_time` timestamp COMMENT '第二中心最晚装车时间',
   `second_center_loading_later_weight` double COMMENT '第二中心最晚装车扫描对应重量',
   `second_center_send_later_time` timestamp COMMENT '第二中心最晚发件时间',
   `second_center_send_later_weight` double COMMENT '第二中心最晚发件扫描对应重量',
   `second_center_loading_send_shipment_no` string COMMENT '第二中心最晚装车发件扫描对应任务号',
   `second_center_loading_send_planned_departure_time` timestamp COMMENT '第二中心最晚装车发件规划发车时间',
   `second_center_loading_send_planned_arrival_time` timestamp COMMENT '第二中心最晚装车发件规划到车时间',
   `second_center_loading_send_actual_departure_time` timestamp COMMENT '第二中心最晚装车发件实际发车时间',
   `second_center_loading_send_actual_arrival_time` timestamp COMMENT '第二中心最晚装车发件实际到车时间',
   `second_center_loading_send_next_network_code` string COMMENT '第二中心最晚装车发件实际下一站网点编码',
   `second_center_loading_send_next_network_type` tinyint COMMENT '第二中心最晚装车发件实际下一站网点类型',
   `third_center_network_code` string COMMENT '第三转运中心',
   `third_center_unloading_early_time` timestamp COMMENT '第三中心最早卸车时间',
   `third_center_unloading_early_weight` double COMMENT '第三中心最早卸车扫描对应重量',
   `thirdcenter_arrival_early_time` timestamp COMMENT '第三中心最早到件时间',
   `third_center_arrival_early_weight` double COMMENT '第三中心最早到件扫描对应重量',
   `third_center_unloading_arrival_shipment_no` string COMMENT '第三中心最早卸车到件扫描对应任务号',
   `third_center_unloading_arrival_planned_departure_time` timestamp COMMENT '第三中心最早卸车到件规划发车时间',
   `third_center_unloading_arrival_planned_arrival_time` timestamp COMMENT '第三中心最早卸车到件规划到车时间',
   `third_center_unloading_arrival_actual_departure_time` timestamp COMMENT '第三中心最早卸车到件实际发车时间',
   `third_center_unloading_arrival_actual_arrival_time` timestamp COMMENT '第三中心最早卸车到件实际到车时间',
   `third_center_loading_later_time` timestamp COMMENT '第三中心最晚装车时间',
   `third_center_loading_later_weight` double COMMENT '第三中心最晚装车扫描对应重量',
   `third_center_send_later_time` timestamp COMMENT '第三中心最晚发件时间',
   `third_center_send_later_weight` double COMMENT '第三中心最晚发件扫描对应重量',
   `third_center_loading_send_shipment_no` string COMMENT '第三中心最晚装车发件扫描对应任务号',
   `third_center_loading_send_planned_departure_time` timestamp COMMENT '第三中心最晚装车发件规划发车时间',
   `third_center_loading_send_planned_arrival_time` timestamp COMMENT '第三中心最晚装车发件规划到车时间',
   `third_center_loading_send_actual_departure_time` timestamp COMMENT '第三中心最晚装车发件实际发车时间',
   `third_center_loading_send_actual_arrival_time` timestamp COMMENT '第三中心最晚装车发件实际到车时间',
   `third_center_loading_send_next_network_code` string COMMENT '第三中心最晚装车发件实际下一站网点编码',
   `third_center_loading_send_next_network_type` tinyint COMMENT '第三中心最晚装车发件实际下一站网点类型',
   `fourth_center_network_code` string COMMENT '第四转运中心',
   `fourth_center_unloading_early_time` timestamp COMMENT '第四中心最早卸车时间',
   `fourth_center_unloading_early_weight` double COMMENT '第四中心最早卸车扫描对应重量',
   `fourth_center_arrival_early_time` timestamp COMMENT '第四中心最早到件时间',
   `fourth_center_arrival_early_weight` double COMMENT '第四中心最早到件扫描对应重量',
   `fourth_center_unloading_arrival_shipment_no` string COMMENT '第四中心最早卸车到件扫描对应任务号',
   `fourth_center_unloading_arrival_planned_departure_time` timestamp COMMENT '第四中心最早卸车到件规划发车时间',
   `fourth_center_unloading_arrival_planned_arrival_time` timestamp COMMENT '第四中心最早卸车到件规划到车时间',
   `fourth_center_unloading_arrival_actual_departure_time` timestamp COMMENT '第四中心最早卸车到件实际发车时间',
   `fourth_center_unloading_arrival_actual_arrival_time` timestamp COMMENT '第四中心最早卸车到件实际到车时间',
   `fourth_center_loading_later_time` timestamp COMMENT '第四中心最晚装车时间',
   `fourth_center_loading_later_weight` double COMMENT '第四中心最晚装车扫描对应重量',
   `fourth_center_send_later_time` timestamp COMMENT '第四中心最晚发件时间',
   `fourth_center_send_later_weight` double COMMENT '第四中心最晚发件扫描对应重量',
   `fourth_center_loading_send_shipment_no` string COMMENT '第四中心最晚装车发件扫描对应任务号',
   `fourth_center_loading_send_planned_departure_time` timestamp COMMENT '第四中心最晚装车发件规划发车时间',
   `fourth_center_loading_send_planned_arrival_time` timestamp COMMENT '第四中心最晚装车发件规划到车时间',
   `fourth_center_loading_send_actual_departure_time` timestamp COMMENT '第四中心最晚装车发件实际发车时间',
   `fourth_center_loading_send_actual_arrival_time` timestamp COMMENT '第四中心最晚装车发件实际到车时间',
   `fourth_center_loading_send_next_network_code` string COMMENT '第四中心最晚装车发件实际下一站网点编码',
   `fourth_center_loading_send_next_network_type` tinyint COMMENT '第四中心最晚装车发件实际下一站网点类型',
   `end_center_network_code` string COMMENT '倒序第一个转运中心',
   `end_center_unloading_early_time` timestamp COMMENT '倒序第一个中心最早卸车时间',
   `end_center_unloading_early_weight` double COMMENT '倒序第一个中心最早卸车扫描对应重量',
   `end_center_arrival_early_time` timestamp COMMENT '倒序第一个中心最早到件时间',
   `end_center_arrival_early_weight` double COMMENT '倒序第一个中心最早到件扫描对应重量',
   `end_center_unloading_arrival_shipment_no` string COMMENT '倒序第一个中心最早卸车到件扫描对应任务号',
   `end_center_unloading_arrival_planned_departure_time` timestamp COMMENT '倒序第一个中心最早卸车到件规划发车时间',
   `end_center_unloading_arrival_planned_arrival_time` timestamp COMMENT '倒序第一个中心最早卸车到件规划到车时间',
   `end_center_unloading_arrival_actual_departure_time` timestamp COMMENT '倒序第一个中心最早卸车到件实际发车时间',
   `end_center_unloading_arrival_actual_arrival_time` timestamp COMMENT '倒序第一个中心最早卸车到件实际到车时间',
   `end_center_loading_later_time` timestamp COMMENT '倒序第一个中心最晚装车时间',
   `end_center_loading_later_weight` double COMMENT '倒序第一个中心最晚装车扫描对应重量',
   `end_center_send_later_time` timestamp COMMENT '倒序第一个中心最晚发件时间',
   `end_center_send_later_weight` double COMMENT '倒序第一个中心最晚发件扫描对应重量',
   `end_center_loading_send_shipment_no` string COMMENT '倒序第一个中心最晚装车发件扫描对应任务号',
   `end_center_loading_send_planned_departure_time` timestamp COMMENT '倒序第一个中心最晚装车发件规划发车时间',
   `end_center_loading_send_planned_arrival_time` timestamp COMMENT '倒序第一个中心最晚装车发件规划到车时间',
   `end_center_loading_send_actual_departure_time` timestamp COMMENT '倒序第一个中心最晚装车发件实际发车时间',
   `end_center_loading_send_actual_arrival_time` timestamp COMMENT '倒序第一个中心最晚装车发件实际到车时间',
   `end_center_loading_send_next_network_code` string COMMENT '倒序第一个中心最晚装车发件实际下一站网点编码',
   `end_center_loading_send_next_network_type` tinyint COMMENT '倒序第一个中心最晚装车发件实际下一站网点类型',
   `end_nodal_network_code` string COMMENT '倒序第一个集散网点编码',
   `end_nodal_unloading_early_time` timestamp COMMENT '倒序第一个集散最早卸车时间',
   `end_nodal_unloading_early_weight` double COMMENT '倒序第一个集散最早卸车扫描对应重量',
   `end_nodal_arrival_early_time` timestamp COMMENT '倒序第一个集散最早到件时间',
   `end_nodal_arrival_early_weight` double COMMENT '倒序第一个集散最早到件扫描对应重量',
   `end_nodal_unloading_arrival_shipment_no` string COMMENT '倒序第一个集散最早卸车到件扫描对应任务号',
   `end_nodal_unloading_arrival_planned_departure_time` timestamp COMMENT '倒序第一个集散最早卸车到件规划发车时间',
   `end_nodal_unloading_arrival_planned_arrival_time` timestamp COMMENT '倒序第一个集散最早卸车到件规划到车时间',
   `end_nodal_unloading_arrival_actual_departure_time` timestamp COMMENT '倒序第一个集散最早卸车到件实际发车时间',
   `end_nodal_unloading_arrival_actual_arrival_time` timestamp COMMENT '倒序第一个集散最早卸车到件实际到车时间',
   `end_nodal_loading_later_time` timestamp COMMENT '倒序第一个集散最晚装车时间',
   `end_nodal_loading_later_weight` double COMMENT '倒序第一个集散最晚装车扫描对应重量',
   `end_nodal_send_later_time` timestamp COMMENT '倒序第一个集散最晚发车时间',
   `end_nodal_send_later_weight` double COMMENT '倒序第一个集散最晚发车扫描对应重量',
   `end_nodal_loading_send_shipment_no` string COMMENT '倒序第一个集散最晚装车发件扫描对应任务号',
   `end_nodal_loading_send_planned_departure_time` timestamp COMMENT '倒序第一个集散最晚装车发件规划发车时间',
   `end_nodal_loading_send_planned_arrival_time` timestamp COMMENT '倒序第一个集散最晚装车发件规划到车时间',
   `end_nodal_loading_send_actual_departure_time` timestamp COMMENT '倒序第一个集散最晚装车发件实际发车时间',
   `end_nodal_loading_send_actual_arrival_time` timestamp COMMENT '倒序第一个集散最晚装车发件实际到车时间',
   `end_nodal_loading_send_next_network_code` string COMMENT '倒序第一个集散最晚装车发件实际下一站网点编码',
   `end_nodal_loading_send_next_network_type` tinyint COMMENT '倒序第一个集散最晚装车发件实际下一站网点类型',
   `end_network_network_code` string COMMENT '倒序第一个网点网点编码',
   `end_network_unloading_early_time` timestamp COMMENT '倒序第一个网点最最早卸车时间',
   `end_network_arrival_early_time` timestamp COMMENT '倒序第一个网点最最早到件时间',
   `deliver_early_scantime` timestamp COMMENT '最早派件时间',
   `deliver_later_scantime` timestamp COMMENT '最晚派件时间',
   `deliver_later_scansitecode` string COMMENT '最晚派件网点',
   `deliver_later_weight` double COMMENT '最晚派件重量',
   `deliver_later_user` string COMMENT '最晚派件人',
   `sign_later_scantime` timestamp COMMENT '最晚签收时间',
   `sign_early_scantime` timestamp COMMENT '最早签收时间',
   `sign_early_scansitecode` string COMMENT '最早签收网点',
   `sign_early_weight` double COMMENT '最早签收重量',
   `aging_sign_scantime` timestamp COMMENT '实效签收时间',
   `aging_sign_scansitecode` string COMMENT '实效签收网点',
   `aging_sign_weight` double COMMENT '实效签收重量',
   `aging_sign_scantype` string COMMENT '实效签收扫描类型',
   `actual_sign_scantime` timestamp COMMENT '实际签收时间',
   `actual_sign_scansitecode` string COMMENT '实际签收网点',
   `actual_sign_weight` double COMMENT '实际签收重量',
   `actual_sign_scantype` string COMMENT '实际签收扫描类型',
   `is_sign` string COMMENT '签收标识,1是，0否',
   `send_earlist_scantime` timestamp COMMENT '运单最早发车时间',
   `first_network_loading_send_oper_next_network_code` string COMMENT '顺序第一个网点最晚装车发件操作下一站网点编码',
   `first_network_loading_send_oper_next_network_name` string COMMENT '顺序第一个网点最晚装车发件操作下一站网点名称',
   `first_nodal_loading_send_oper_next_network_code` string COMMENT '顺序第一个集散最晚装车发件操作下一站网点编码',
   `first_nodal_loading_send_oper_next_network_name` string COMMENT '顺序第一个集散最晚装车发件操作下一站网点名称',
   `first_nodal_actual_pre_network_code` string COMMENT '顺序第一个集散实际上一站网点编码',
   `first_nodal_actual_pre_network_type` tinyint COMMENT '顺序第一个集散实际上一站网点类型',
   `first_center_loading_send_oper_next_network_code` string COMMENT '顺序第一个中心最晚装车发件操作下一站网点编码',
   `first_center_loading_send_oper_next_network_name` string COMMENT '顺序第一个中心最晚装车发件操作下一站网点名称',
   `first_center_actual_pre_network_code` string COMMENT '顺序第一个中心实际上一站网点编码',
   `first_center_actual_pre_network_type` tinyint COMMENT '顺序第一个中心实际上一站网点类型',
   `end_center_loading_send_oper_next_network_code` string COMMENT '倒序第一个中心最晚装车发件操作下一站网点编码',
   `end_center_loading_send_oper_next_network_name` string COMMENT '倒序第一个中心最晚装车发件操作下一站网点名称',
   `end_center_actual_pre_network_code` string COMMENT '倒序第一个中心实际上一站网点编码',
   `end_center_actual_pre_network_type` tinyint COMMENT '倒序第一个中心实际上一站网点类型',
   `end_nodal_loading_send_oper_next_network_code` string COMMENT '倒序第一个集散最晚装车发件操作下一站网点编码',
   `end_nodal_loading_send_oper_next_network_name` string COMMENT '倒序第一个集散最晚装车发件操作下一站网点名称',
   `end_nodal_actual_pre_network_code` string COMMENT '倒序第一个集散实际上一站网点编码',
   `end_nodal_actual_pre_network_type` tinyint COMMENT '倒序第一个集散实际上一站网点类型',
   `end_network_actual_pre_network_code` string COMMENT  '倒序第一个网点实际上一站网点编码',
   `end_network_actual_pre_network_type` tinyint COMMENT '倒序第一个网点实际上一站网点类型'
   )
 COMMENT '运单操作轨迹全链路宽表,粒度:运单'
 PARTITIONED BY (
   `dt` string COMMENT '分区字段，运单录入时间')
 ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
 STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
 OUTPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
 LOCATION
   '/dw/hive/jms_dwd.db/external/dwd_s03_whole_operations_waybill_trace_mid_dt'
 TBLPROPERTIES (
   'discover.partitions'='true',
   'parquet.column.index.access'='true' );

--目标表：dwd_s03_whole_operations_waybill_trace_mid_dt
--该表设计目标：
--    以运单为维度，获取运单的全流程状态信息，贯穿 “收-发-到-派-签”，
--    重点记录中间关键节点的信息，
--    始发网点、第一个集散网点、始发转运中心、第二个转运中心。。。第四个转运中心、当前最后一个转运中心、最后一个集散网点、目的网点

--ps：核心实现思路
--  对运单进行分组，将单个运单所有操作信息汇集到一起，通过站点排序，中心排序，集散排序字段以及named_struct，max/min函数，scanType扫描类型，获取运单在关键节点的扫描信息
--  获取规划发车、规划到车、实际发车、实际到车时， 优先从装车、卸车表中获取规划、实际时间，然后从发件、到件表中获取规划、实际时间，这里用coalesce 实现


-- dwd_s03_whole_operations_waybill_trace_mid_dt模型表中，上一站是都是实际上一站， 下一站 既有实际下一站， 也有扫描操作表中包含的规划下一站，这里使用过程中需要注意。

-- 获取dwd_s03_whole_operations_trace_rank_tms_dt表 最近30天的运单操作数据，对运单分组用于计算dwd_s03_whole_operations_waybill_trace_mid_dt表，这里注意：需要和trace_mid表2049分区的数据做去重
-- 注意：对运单分组的时候，dt 需要取最小值,  min(dt) as dt, 因为有的操作之前在2049分区， 后续出现在了正确的分区， 所以这里取最小值，获取正确的分区信息
--
-- step_center 中心正序
-- step_entrepot 集散正序
-- step_center_reserve 中心倒序
-- step_entrepot_reserve 集散倒序
-- step 站点排序